import { defineStore } from 'pinia';
import { ref } from 'vue';

export const useUavModelLayerStore = defineStore('uavModelLayer', {
  state: () => ({
    isActive: false, // 控制图层是否显示
    uavModels: [], // 存储无人机模型数据
    trajectoryData: [], // 轨迹数据
    currentIndex: 0, // 当前动画帧索引
    animationTimer: null, // 动画定时器
    uavIconUrl: '/public/img/uav_2_1.svg', // 无人机图标
    isAnimating: false // 是否正在动画中
  }),

  actions: {
    // 设置激活状态
    setActive (isActive) {
      this.isActive = isActive;

      // 如果激活，且没有正在进行动画，则开始动画
      if (isActive && !this.isAnimating && this.trajectoryData.length > 0) {
        this.startAnimation();
      }
      // 如果关闭，则停止动画
      else if (!isActive && this.isAnimating) {
        this.stopAnimation();
      }
    },

    // 设置轨迹数据
    setTrajectoryData (data) {
      this.trajectoryData = data;
    },

    // 添加无人机模型
    addUavModel (model) {
      this.uavModels.push(model);
    },

    // 清空无人机模型
    clearUavModels () {
      this.uavModels = [];
    },

    // 开始动画
    startAnimation () {
      if (this.trajectoryData.length === 0) return;

      this.isAnimating = true;
      this.currentIndex = 0;

      // 创建定时器，按秒推送数据实现动画效果
      this.animationTimer = setInterval(() => {
        // 获取当前帧的位置数据
        if (this.currentIndex < this.trajectoryData.length) {
          const position = this.trajectoryData[this.currentIndex];

          // 更新所有无人机位置
          if (this.updateUavPosition) {
            this.updateUavPosition(position);
          }

          this.currentIndex++;
        } else {
          // 轨迹结束，重新开始
          this.currentIndex = 0;
        }
      }, 1000); // 每秒更新一次位置
    },

    // 停止动画
    stopAnimation () {
      if (this.animationTimer) {
        clearInterval(this.animationTimer);
        this.animationTimer = null;
      }
      this.isAnimating = false;
    },

    // 设置更新无人机位置的回调函数
    setUpdateCallback (callback) {
      this.updateUavPosition = callback;
    },

    // 重置数据
    reset () {
      this.stopAnimation();
      this.isActive = false;
      this.uavModels = [];
      this.trajectoryData = [];
      this.currentIndex = 0;
      this.updateUavPosition = null;
    }
  }
});